package com.itheima.controller;

import com.itheima.domain.User;
import com.itheima.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class HelloController {

    @RequestMapping("/toHellouser")
    public String hellouser(Model model){
        //此处使用的是模拟数据，没有使用注入
        UserService userService = new UserService();
        List<User> userList = userService.findAll();

        model.addAttribute("userlist",userList);
        //跳转到 templates/hellouser.html 进行解析
        return "hellouser";
    }

//    @GetMapping("/toHellouser1")
//    public String hellouser1(){
//        return "hellouser1";
//    }

    /**
     * 加上了page和limit属性
     * 因为通过观察前端的layui.use('table', function(){}函数他自带的分页组件会向后台发送请求的同时带上page和limit属性
     * 例如：http://localhost:8080/hellouser_json?page=1&limit=10
       * */
    @RequestMapping("/hellouser_json")
    @ResponseBody
    public Map<String, Object> hellouser1(Model model, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit){
        //此处使用的是模拟数据，没有使用注入
        UserService userService = new UserService();
        List<User> userList = userService.findAll();

        int total = userList.size();
        // 计算当前需要显示的数据下标起始值
        int startIndex = (page - 1) * limit;
        int endIndex = Math.min(startIndex + limit,total);

        List<User> pageList = userList.subList(startIndex,endIndex);
        Map<String, Object> resultMap = new HashMap<String, Object>();

        resultMap.put("code", 0);  //此处为0
        resultMap.put("msg", ""); //此处为空
        resultMap.put("count", userList.size());//此处放入总的数据数量
        resultMap.put("data", pageList); //此处应该放入实际页的数据

        return resultMap;
    }
}
